﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

using BDConexion;
using Entidades;

namespace CapaDatos
{
   public class UsuariosDAO
    {
        private conexionBD conn = new conexionBD();
        private SqlCommand cmdUsuario = new SqlCommand();

        public string IngresarUsuario (Usuario U)
        {
            string rpta = "";
            try
            {
                cmdUsuario.Parameters.Clear();
                cmdUsuario.CommandType = CommandType.StoredProcedure;
                cmdUsuario.CommandText = "SP_Insertar_Usuario";
                cmdUsuario.Connection = conn.conectarBD();
                {
                    cmdUsuario.Parameters.AddWithValue("@pIdUsuario", U.IdUsario);
                    cmdUsuario.Parameters.AddWithValue("@pLogin", U.Login);
                    cmdUsuario.Parameters.AddWithValue("@pPassword", U.Password);
                   


                }
                int registros;
                registros = cmdUsuario.ExecuteNonQuery();
                if (registros == 1)
                {
                    rpta = "OK";
                }
                else
                {
                    rpta = "Error al Insertar Usuario";
                }


            }
            catch (Exception ex)
            {

                System.Console.Write(ex.Message);
            }
            return rpta;
        }

        public string actualizarUsuario(Usuario U)
        {
            string rpta = "";
            try
            {
                cmdUsuario.Parameters.Clear();
                cmdUsuario.CommandType = CommandType.StoredProcedure;
                cmdUsuario.CommandText = "SP_Actualizar_Usuario";
                cmdUsuario.Connection = conn.conectarBD();
                {
                    cmdUsuario.Parameters.AddWithValue("@pIdUsuario", U.IdUsario);
                    cmdUsuario.Parameters.AddWithValue("@pLogin", U.Login);
                    cmdUsuario.Parameters.AddWithValue("@pPassword", U.Password);
                }
                int registros;
                registros = cmdUsuario.ExecuteNonQuery();
                if (registros == 1)
                {
                    rpta = "OK";

                }
                else
                {
                    rpta = "Error al actualizar";
                }
            }
            catch (Exception ex)
            {

                System.Console.Write(ex.Message);
            }

            return rpta;


        }

        public List<Usuario> listarUsuario()
        {
            List<Usuario> lista = new List<Usuario>();
           Usuario U;
            SqlDataReader lector;
            try
            {
                cmdUsuario.Parameters.Clear();
                cmdUsuario.CommandType = CommandType.StoredProcedure;
                cmdUsuario.CommandText = "SP_Listar_Usuario";
                cmdUsuario.Connection = conn.conectarBD();

                lector = cmdUsuario.ExecuteReader();

                while (lector.Read())
                {
                   U = new Usuario();
                    U.IdUsario = (int)(lector[0]);
                   U.Login = (string)lector[1];
                   U.Password = (string)lector[2];
                    

                    lista.Add(U);
                }

            }
            catch (Exception ex)
            {

                System.Console.Write(ex.Message);
            }
            return lista;

        }

        public Usuario buscarUsuarioById(int id)
        {
          Usuario U = new Usuario();
            SqlDataReader lector;
            try
            {
                cmdUsuario.Parameters.Clear();
                cmdUsuario.CommandType = CommandType.StoredProcedure;
                cmdUsuario.CommandText = "SP_BuscarUsuarioById";
                cmdUsuario.Connection = conn.conectarBD();

                {
                    cmdUsuario.Parameters.AddWithValue("@pIdUusuario", id);

                }
                lector = cmdUsuario.ExecuteReader();
                if (lector.Read())
                {
                    U.IdUsario = (int)(lector[0]);
                    U.Login = (string)lector[1];
                    U.Password = (string)lector[2];
                }

            }
            catch (Exception ex)
            {

                System.Console.Write(ex.Message);
            }

            return U;
        }

        public int CodUsuario()
        {
            int codigo = 0;
            SqlDataReader lector;
            cmdUsuario.Parameters.Clear();
            cmdUsuario.CommandType = CommandType.StoredProcedure;
            cmdUsuario.CommandText = "SP_Generar_Codigo_Usuario";
            cmdUsuario.Connection = conn.conectarBD();

            lector = cmdUsuario.ExecuteReader();
            if (lector.Read())
            {
                codigo = (int)lector[0];
            }
            return codigo;
        }

        public Usuario autenticarUsuario(Usuario usuario)
        {
            Usuario U = new Usuario();
            SqlDataReader lector;
            try
            {
                cmdUsuario.Parameters.Clear();
                cmdUsuario.CommandType = CommandType.StoredProcedure;
                cmdUsuario.CommandText = "SP_Autenticar_Usuarios";
                cmdUsuario.Connection = conn.conectarBD();

                {
                    cmdUsuario.Parameters.AddWithValue("@login", usuario.Login);
                    cmdUsuario.Parameters.AddWithValue("@password", usuario.Password);

                }
                lector = cmdUsuario.ExecuteReader();
                while (lector.Read())
                {
                    U.IdUsario = (int)(lector[0]);
                    U.Login = (string)lector[1];
                    U.Password = (string)lector[2];
                    U.IdEmpleado = lector[3].ToString();
                    //Cuando intente recuperar valores numericos
                    // U.IdEmpleado = lector.GetInt32(3).ToString();
                }

            }
            catch (Exception ex)
            {

                System.Console.Write(ex.Message);
            }

            return U;
        }
    }
}
